package com.iuie.ns.datum.service;

import java.io.IOException;
import java.io.OutputStream;
import java.text.ParseException;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.iuie.ns.datum.vo.BlogInfoVO;
import com.iuie.ns.datum.vo.BlogReadRecordVO;
import com.iuie.ns.datum.vo.BookInfoVO;
import com.iuie.ns.datum.vo.FileInfoVO;
import com.iuie.ns.frame.service.IBaseService;
import com.iuie.ns.frame.web.dataset.vo.Page;
import org.apache.solr.client.solrj.SolrServerException;

public interface IBlogService extends IBaseService<BlogInfoVO> {
	
	/**
	 * 根据博客类型查询博客
	 * @param blogType
	 * @return
	 */
	List<BlogInfoVO> findByBlogType(String blogType);

	/**
	 * 标记阅读
	 * @param blogId
	 */
	void updateBySignRead(Long blogId);
	
	/**
	 * 新增博客
	 * @param one 博客信息
	 * @return
	 * @throws IOException
	 */
	BlogInfoVO addBlog(BlogInfoVO one) throws IOException, Exception;
	
	/**
	 * 根据ID查询博客信息
	 * @param id
	 * @return
	 * @date 2017年8月24日 下午11:49:37
	 */
	BlogInfoVO findById(Long id);
	
	/**
	 * 根据博客id删除博客
	 */
	void deleteById(Long id);
 
	/**
	 * 根据名称查询
	 * @param name
	 * @return
	 */
    List<BlogInfoVO> findByBlogName(String name);

    /**
     * markdown形式博客新增
     * @param blogInfo
     * @param htmlContent
     * @param fileInfo 
     * @return
     * @throws IOException 
     */
	BlogInfoVO addMdBlog(BlogInfoVO blogInfo, FileInfoVO fileInfo) throws IOException, SolrServerException;

	/**
	 * 修改markdown形式博客
	 * @param blogInfo
	 */
	void updateMdBlog(BlogInfoVO blogInfo);

	/**
	 * 下载markdown类型博客的markdown文档
	 * @param blogId
	 * @return
	 * @throws IOException 
	 */
	void mdDownload(String blogId, HttpServletResponse resp) throws IOException;

	/**
	 * 打包markdown博客
	 * @param startTime
	 * @param endTime
	 * @param expects
	 * @param outputStream
	 * @throws ParseException 
	 */
	void mdPack(String startTime, String endTime, String[] expects, OutputStream outputStream) throws ParseException;
	
	/**
	 * 查询markdown博客根据时间范围
	 * @param startTime
	 * @param endTime
	 * @param expects
	 * @return
	 * @throws ParseException 
	 */
	List<BlogInfoVO> findMDBlogByTimeRange(String startTime, String endTime, String[] expects) throws ParseException;

	/**
	 * 查询blog的阅读记录
	 * @param blogId
	 * @return
	 */
	List<BlogReadRecordVO> findBlogReadbyIdPage(Page page, Long blogId);

	/**
	 * 更新blog的bookId字段
	 * @param blogId
	 * @param bookId
	 */
	void updateBlogBookId(Long blogId, String bookId);

	/**
	 * 根据bookId得到博客
	 * @param bookId
	 * @return
	 */
	List<BookInfoVO> findBlogsByBookId(String bookId);
	
	/**
	 * 修改博客备注
	 * @param blogId
	 * @param remark
	 * @date 2018年5月6日下午4:11:56
	 */
	void updateMdBlogRemark(Long blogId, String remarks);

	/**
	 * 根据博客Id查询博客备注
	 * @param blogId
	 * @return
	 * @date 2018年5月7日上午8:59:33
	 */
	String findRemarkById(Long blogId);
	
	/**
	 * 加载博客阅读量报表数据
	 * @param params
	 * @param request
	 * @date 2018年5月26日下午1:56:49
	 */
	void loadReadTotalReportData(Map<String, Object> params, HttpServletRequest request);
	
}
